<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 封装三个函数  date = new Date(); => 对象 => 引用类型
    // 1. 在不影响原日期对象的前提下,封装一个函数,传入一个日期对象 => 返回该月的第一天星期几(0->7)

    // var date = new Date(); // 2022-10-25
    // date.setDate(1);
    // var week = date.getDay(); // 0-6
    // week = week == 0 ? 7 : week;
    // console.log(week);


    function getFirstDayWeek(date) {// date = d1
        date = new Date(date);  //为了不影响原日期对象 -> 先创建一个新日期对象
        date.setDate(1);
        var week = date.getDay(); // 0-6
        week = week == 0 ? 7 : week;
        return week;
    }

    var d1 = new Date();
    var result = getFirstDayWeek(d1); // 6
    // console.log(result);
    // console.log(d1);



    // 2. 在不影响原日期对象的前提下,封装一个函数,传入一个日期对象 => 返回上个月有多少天  (本月的第0天 就是上个月最后一天 => 是几号就有多少天)

    // var date = new Date();
    // date.setDate(0);
    // console.log(date.getDate());
    // console.log(date);

    // function getLastMonthDays(date) { // date = d1
    //     date = new Date(date);  //  date => 复制后的新日期
    //     date.setDate(0);
    //     return date.getDate();
    // }

    // var d1 = new Date();
    // var result = getLastMonthDays(d1);
    // console.log(result);
    // console.log(d1);






    // 3. 在不影响原日期对象的前提下,封装一个函数,传入一个日期对象 => 返回当前月有多少天   (下个月的第0天 就是本月最后一天 => 是几号就有多少天)



    function getThisMonthDays(date) { // date = d1

        // 月份切换要注意: 大月(31)向小月切换时( 28 29 30) 可能会有问题 (如果日期时31号 可能会超出小月的临界值 => 自动换算)
        // 假如今天 2022-10-31 
        // 下个月: 2022-11-31 => 2022-12-1
        // 第0天:  2022-12-0  => 2022-11-30  => 30

        // 怎么解决?
        // 方法中切换为下个月之后 -> 将日期设置为0 => 反正都是0,可以提前将日期设置为每个月都有的日期 => 1号
        // 假如今天 2022-10-31 
        // 提前设置1号:  2022-10-1
        // 下个月:       2022-11-1
        // 第0天:  2022-11-0 => 2022-10-31

        date = new Date(date);  //  date => 复制后的新日期
        date.setDate(1);
        date.setMonth(date.getMonth() + 1); // 下个月
        date.setDate(0);  // 第0天
        return date.getDate();
    }

    var d1 = new Date("2022-10-31");
    var result = getThisMonthDays(d1);
    console.log(result);
    console.log(d1);







</script>

</html>